<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
    
  </style>
</head>
<body>
  
</body>
<script>

  // 自定义的工厂模式
  // function fn(n){
  //   const obj = {
  //     ...fn.xxx
  //   }
  //   obj.name = n;
  //   return obj;
  // }
  // fn.xxx = {
  //   show:function(){
  //     console.log(this.name)
  //   }
  // }

  // const f = fn("张三")
  // console.log(f);
  // f.show();

  // ======

  function fun(n){
    this.name = n;
  }
  fun.prototype.show = function(){
    console.log(this.name)
  }

  const fu = new fun("张三")
  console.log(fu);
  fu.show();

  // new的原理（做了什么）
  //   1. 创建一个新对象
  //   2. 改变原函数的this指向该对象
  //   3. 修改新对象的隐式原型，指向了原函数的显式原型
  //   4. 执行原函数内所有代码
  //   5. 检测原函数是否主动返回对象，如果没有，就返回这个新对象


  
</script>
</html>